package Demo1;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 34255
 * Date: 2024-06-15
 * Time: 13:27
 */
//处理异常的第一种方式：throws抛给方法调用者，告诉方法的调用者这个方法可能会抛出异常，需要调用者处理异常，如果不想处理该异常，继续用throws抛出
//直到抛给main方法，如果main也没有去处理该异常，则交给JVM处理
//第一种情况：运行时异常
//运行时异常:
//    抛出的异常属于运行时异常或其子类，可以选择在方法的调用者或方法体内处理该异常，或者用throws抛出异常，提示方法调用者处理，如果不想处理该异常，继续用throws抛出，也可以都不处理该类异常
//    因为运行时异常到最后我们没处理，jvm也会帮我们处理，
//public class Test {
//    public static void func(int a)throws RuntimeException{
//        if(a == 0){//手动抛出异常
//            System.out.println("异常之前的代码正常执行...");
//            throw new RuntimeException();
////            System.out.println("如果发生异常，其后代码不会执行...");
//        }
//    }
//    public static void func1()throws RuntimeException{
//        func(0);
//    }
//    public static void main(String[] args) throws RuntimeException{
//        func1();
//    }
//}
//第二种情况：编译时异常
//编译时异常：
//    如果抛出的异常属于编译时异常，则必须先处理该异常才能，否则编译不会通过
//    第一种方式：不处理该异常，交给jvm来处理异常，一直用throws声明异常，直到main方法，main也没处理交给jvm处理
//    第二种方式：处理该异常，在方法体或方法调用者方法体内使用try - catch - (Finally)处理掉该类异常
public class Test{
    public static void func1(int a){
        try{
            if(a == 0){
                System.out.println("异常前面的代码正常执行");
                throw new ArrayOutException("提示信息");
//                System.out.println("异常处理...");
            }
        }catch(Exception e){
            System.out.println("处理异常...");
            e.printStackTrace();//打印异常信息
        }finally{
            System.out.println("不管是否发生异常，finally块里面的代码一定会被执行...");
        }
    }
    public static void func2(){
        func1(0);
    }
    public static void main(String[] args) {
        func2();
    }
}